#!/bin/bash

#-------------------------------------------------------------------------------
# Installation return codes are:
#
# 0 - no error
# 10 - usage error
# 20 - invalid/non-existent directory on HMC
# 30 - install file not found
# 40 - RPM test verify install error
# 50 - RPM install error
# 60 - 'tar' command failure
#
# *The actual value returned will be 1x, 2x, etc, where x will be either 0 or 4
# which is based on any RPM un-install errors. Else, '0' if successful completion
#-------------------------------------------------------------------------------

#-------------------------------------------------------------------------------
# Initialize script return code, log file name
#-------------------------------------------------------------------------------
exitRC=0
logFile=/tmp/hmc_install.log

#-------------------------------------------------------------------------------
# Common exit point
#-------------------------------------------------------------------------------
exit_cleanup() {

   # keep the log file, but ensure a different user can overwrite it next time
   chmod 666 $logFile

   if [ $1 -ne 0 ]
   then
      exit $1$exitRC
   else
      exit 0
   fi
}

#-------------------------------------------------------------------------------
# RPM  install
#-------------------------------------------------------------------------------
dorpm() {

   # Do not log the test install output. The format for the "normal" RPM install
   # processing inside this script is 'rpm -i <file spec> --force --nodeps'
   rpm --test  $1 $2 $3 $4
   if [ $? -eq 0 ]
   then
      rpm $*
      rc=$?
      if [ $rc -ne 0 ]
      then
         echo "rpm fileset, $2, installation error, $?" >> $logFile
	 return $rc
      fi
   else
      echo "rpm fileset, $2, cannot be installed. RC = $?" >> $logFile
      exit_cleanup 4
   fi
}

#-------------------------------------------------------------------------------
# RPM erase rpm
#-------------------------------------------------------------------------------
eraserpm() {
   rpm -v $*
   if [ $? -ne 0 ]
   then
      exitRC=4
      echo "error removing rpm fileset named $2" >> $logFile
   fi
}

#-------------------------------------------------------------------------------
# RPM test install
#-------------------------------------------------------------------------------
testrpm() {
   rpm --test  $1 $2 $3 $4
   return $?
}


#-------------------------------------------------------------------------------
# Start the product install...
#-------------------------------------------------------------------------------
cd /
image=$1
if [ "$image" = "" ]
then
   echo "Please specify directory containing R3H patches "
   echo "usage: installR3H  <directory>"
   exit_cleanup 1
fi

# check if directory exists
if [ ! -d $image ]
then
 echo "The directory $patchdir doesn't exist"
 echo "Please specify directory containing the patch files."
 exit_cleanup 2
fi

image=$1

rpm -q -a | grep "sysmgt.websm." 1>/dev/null
if [ $? -eq 0 ]
then
   echo "--- Removing websm..." |tee -a  $logFile
   eraserpm -e sysmgt.websm.framework --nodeps 2>> $logFile
   eraserpm -e sysmgt.websm.apps --nodeps 2>> $logFile
   eraserpm -e sysmgt.websm.security --nodeps 2>> $logFile
   eraserpm -e sysmgt.websm.security-ex --nodeps 2>> $logFile
   eraserpm -e sysmgt.websm.security-us --nodeps 2>> $logFile
   eraserpm -e sysmgt.websm.webaccess --nodeps 2>> $logFile
fi

eraserpm -e IBMhsc.coreserver --allmatches --nodeps 2>>$logFile

echo "--- Cleaning up old files..." |tee -a  $logFile
rm -f /usr/websm/codebase/pluginjars/hmcdebug.jar


PATH=$PATH:/opt/IBMJava2-13/jre/bin:
LD_LIBRARY_PATH=/opt/hsc/lib:/opt/hsc/lib/hcmjni:/lib:/usr/lib:$LD_LIBRARY_PATH
export PATH LD_LIBRARY_PATH



echo "--- Installing websm..." | tee  -a  $logFile
dorpm -i $image/sysmgt.websm.framework*.rpm --force 2>> $logFile
dorpm -i $image/sysmgt.websm.apps*.rpm --force 2>> $logFile
dorpm -i $image/sysmgt.websm.security*.rpm --force 2>> $logFile
dorpm -i $image/sysmgt.websm.webaccess*.rpm --force 2>> $logFile

#-------------------------------------------------------------------------------
# Test for installation
#-------------------------------------------------------------------------------

echo "--- Installing HMC Software..." | tee >> $logFile
dorpm -U $image/IBMhsc.lparmgt-*.i386.rpm  --force --nodeps 2>>$logFile
dorpm -U $image/IBMhsc.plfmgt-*.i386.rpm  --force --nodeps 2>>$logFile
dorpm -U $image/IBMhsc.bundles_en_US-*.i386.rpm --force  --nodeps 2>>$logFile
dorpm -U $image/IBMhsc.coreserver-*.i386.rpm --force --nodeps 2>>$logFile
dorpm -U $image/IBMhsc.cimprovider-*.i386.rpm --force --nodeps 2>>$logFile
dorpm -U $image/IBMhsc.pdml_en_US-*.i386.rpm  --force --nodeps 2>>$logFile
dorpm -U $image/IBMhsc.auiml_en_US-*.i386.rpm  --force --nodeps 2>>$logFile


echo "--- Installing rmc..." | tee  -a  $logFile
echo "Installing src..." |tee -a  $logFile
dorpm -U $image/src-*rpm --force --nodeps 2>> $logFile

echo "--- Installing rsct..." |tee -a  $logFile
dorpm -U $image/rsct.core.utils-2.* --force --nodeps 2>> $logFile
dorpm -U $image/rsct.core-2.* --force --nodeps 2>> $logFile
dorpm -U  $image/rsct.service-1.* --force --nodeps 2>> $logFile

echo "--- Installing csm..." |tee -a  $logFile
dorpm -U $image/csm.core-1.* --force --nodeps 2>> $logFile
dorpm -U $image/csm_hmc.server-1.* --force --nodeps 2>> $logFile
dorpm -U $image/csm.server.hsc-1.* --force --nodeps 2>> $logFile

echo "--- Installing InvScout Software..." | tee -a $logFile
rpm -q -a | grep IBMinv 1>/dev/null
if [ $? -eq 0 ]
then
   eraserpm -e IBMinvscout --allmatches --nodeps 2>>$logFile
fi
dorpm -i $image/IBMinvscout-1.0-3.i386.rpm --force --nodeps 2>>$logFile



echo "--- Updating Service Agent..." | tee -a $logFile
# first see if SvcAgentHSC is installed and this is not OEM system

rpm -q -a | grep SvcAgentHSC 2>/dev/null
if [ $? -ne 0 ]
then
   rm -f /usr/websm/config/factory_defaults/AppPD.db
else
  dorpm -U $image/SvcAgentHSC*.rpm --force --nodeps 2>> $logFile
  if [ $? -ne 0 ]
  then
     eraserpm -e SvcAgentHSC --nodeps 2>> $logFile
     dorpm -i $image/SvcAgent*rpm --force --nodeps 2>> $logFile
  fi
fi


echo "--- Installing HSC LPAR ..." |tee -a  $logFile
dorpm -U $image/hsc.lparcmd*.rpm --force --nodeps 2>> $logFile

echo "--- Installing Ucode mgr ..." |tee -a  $logFile
rpm -q -a |grep IBMhsc.ucode-mgr 2>/dev/null
if [ $? -eq 0 ]
then
  eraserpm -e IBMhsc.ucode-mgr --nodeps 2>> $logFile
  grep "tracelogd" /etc/inittab 2>/dev/null
  if [ $? -eq 0 ]
  then
    /bin/sed -e '/^tlog:/d' /etc/inittab > /tmp/hsc_inittab_tmp
    mv /tmp/hsc_inittab_tmp /etc/inittab
    rm -f /tmp/hsc_inittab_tmp
  fi
fi

dorpm -i $image/IBMhsc.ucode-mgr*rpm --force --nodeps  2>> $logFile

if [ -f $image/IBMhsc.bundles_de_DE-1.0-3.i386.rpm ]
then
  rpm -q -a |grep IBMhsc.bundles_de_DE 2>> /dev/null
  if [ $? -eq 0 ]
  then
    echo "--- Removing language bundles ..." |tee -a  $logFile
    eraserpm -e IBMhsc.bundles_de_DE  2>> $logFile
    eraserpm -e IBMhsc.bundles_es_ES  2>> $logFile
    eraserpm -e IBMhsc.bundles_fr_FR  2>> $logFile
    eraserpm -e IBMhsc.bundles_hu_HU  2>> $logFile
    eraserpm -e IBMhsc.bundles_it_IT  2>> $logFile
    eraserpm -e IBMhsc.bundles_ja_JP  2>> $logFile
    eraserpm -e IBMhsc.bundles_ru_RU  2>> $logFile
    eraserpm -e IBMhsc.bundles_sk_SK  2>> $logFile
  fi
  echo "--- Installing language bundles ..."  |tee -a  $logFile
  dorpm -i $image/IBMhsc.bundles_de_DE*rpm --force --nodeps 2>> $logFile
  dorpm -i $image/IBMhsc.bundles_es_ES*rpm --force --nodeps 2>> $logFile
  dorpm -i $image/IBMhsc.bundles_fr_FR*rpm --force --nodeps 2>> $logFile
  dorpm -i $image/IBMhsc.bundles_hu_HU*rpm --force --nodeps 2>> $logFile
  dorpm -i $image/IBMhsc.bundles_it_IT*rpm --force --nodeps 2>> $logFile
  dorpm -i $image/IBMhsc.bundles_ja_JP*rpm --force --nodeps 2>> $logFile
  dorpm -i $image/IBMhsc.bundles_ru_RU*rpm --force --nodeps 2>> $logFile
  dorpm -i $image/IBMhsc.bundles_sk_SK*rpm --force --nodeps 2>> $logFile
fi

cd /

if [ -f $image/hsc.tar ]
then
   echo "--- Installing CIM/miscellaneous updates..." |tee -a  $logFile
   cd /
   tar -xf $image/hsc.tar
   if [ $? -ne 0 ]
   then
      exit_cleanup 6
   fi
fi

if [ -f $image/websm.tar ]
then
   echo "--- Installing framework updates..." |tee -a  $logFile
   tar -xf $image/websm.tar
   if [ $? -ne 0 ]
   then
      exit_cleanup 6
   fi
fi


if [ -f $image/postinstall ]
then
   $image/postinstall
fi

echo "PLEASE REBOOT YOUR SYSTEM IN ORDER TO COMMIT THE CHANGES....."
echo "HMC Driver R3H-52 Rev 2.0" > /tmp/.version

exit_cleanup 0
